{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1 初始化并导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "\n",
    "dpath = './data/'\n",
    "datatest = pd.read_csv(dpath + \"RentListingInquries_FE_test.csv\")\n",
    "datatrain = pd.read_csv(dpath + \"RentListingInquries_FE_train.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "datatrain.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "bathrooms 浴室数量<br>bedrooms 卧室数量<br>price 价格<br>price_rooms 单位类型房间价格(p/房数+1)<br>room_diff 浴室数-卧室数<br>room_num 浴室数+卧室数<br>top_xx_manager 经理人等级<br>distance 房屋地址与manhattan的距离<br>display_address 地址<br>各类features 各类特点（有1无0）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "datatrain.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 74659 entries, 0 to 74658\n",
      "Columns: 227 entries, bathrooms to work\n",
      "dtypes: float64(9), int64(218)\n",
      "memory usage: 129.3 MB\n"
     ]
    }
   ],
   "source": [
    "datatest.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "datatest.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看目标函数分布均衡性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fcbc615ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(datatrain.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不均衡样本，采用分层K折交叉验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=1) #随机种子设为常数1，每次分折结果相同"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = datatrain['interest_level']\n",
    "x_train = datatrain.drop([\"interest_level\"], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2 寻找参数n_estimators, max_depth, min_child_weight"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.1 寻找n_estimators"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义模型训练函数modelfit:默认参数(学习率为0.1较大),观察弱分类数目的大致范围 （采用默认参数配置，看看模型是过拟合还是欠拟合）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def modelfit(alg, x_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params() #提取参数\n",
    "        xgb_param['num_class'] = 3 #设置类目参数\n",
    "        #直接调用xgboost\n",
    "        xgtrain = xgb.DMatrix(x_train, label = y_train)\n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "        n_es = cvresult.shape[0] #最佳弱分类器参数n_estimators\n",
    "        alg.set_params(n_estimators = n_es) #重新赋值\n",
    "        alg.fit(x_train, y_train, eval_metric='mlogloss') #采用交叉验证得到的最佳参数n_estimators，训练模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用XGBClassifier寻找参数并训练得到最佳n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #探索值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, x_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "作n_estimators vs log loss图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fc8046ef60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std']         \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( '2018hw3-n_es-1.png' )\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "286"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cvresult.shape[0] #查看最佳n_estimator值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "显示出标准差的细节图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nNXXq1KmMGTOm2cORJEmS1CTTpk1j7NixAGNTStN6e5z3LEmSJElSnZloSZIkSVKdmWhJkiRJUp2Z\naEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZlo\nSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJ\nkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmS\nJElSnZloSZIkSVKdmWhJkiRJUp2NaPYABrNp06Y1ewiSJEmSmqi/OUGklOo8lNYXEcsBLzR7HJIk\nSZIGjeVTSv/qbWcTrS5ERADjgLebPRZgUYqkb3kGx3jajde/ebz2zeO1bx6vffN47ZvL6988Xvve\nWRSYkvqQPDl1sAulC9jrbHUgFTkfAG+nlJzL2GBe/+bx2jeP1755vPbN47VvLq9/83jte63P18bF\nMCRJkiSpzky0JEmSJKnOTLQGv1nAT0p/qvG8/s3jtW8er33zeO2bx2vfXF7/5vHaDxAXw5AkSZKk\nOrOiJUmSJEl1ZqIlSZIkSXVmoiVJkiRJdWaiJUmSJEl1ZqLVJBGxWURcGhFTIiJFxGeq9kdEHFHa\n/25E3BgRa1T1WTwiJkfE1NJrckQs1th30npqXfuIWCAifhERf4+I6aU+Z0fEuKpzPFM6tvz188a/\nm9bSi8/9mV1c1zuq+iwYEcdFxGul/0aXRMTyjX0nracX1776une+/r2sj5/7foiIQyPi7oh4OyJe\niYiLI2K1qj49fq4jYnzpv+H0Ur9jI2JkY99Na+np2kfE+0rX/fGImBERz5Wu69iq83T1/8ZXG/+O\nWkcvP/c3dnFd/1DVx991+qEXn/2Vavzc372sn5/9+WCi1TyLAA8CX+9m//eA75T2rwu8BFwTEYuW\n9TkPWAvYvvRaC5g8UAMeQmpd+1HAOsBPS3/uBnwIuKSLvj8Gli17/ddADHaI6elzD3Alldd1h6r9\nxwC7AnsBmwCjgcsiYnjdRzu09HTtl6167Q8k4E9V/fzc993mwAnABsC2wAjg6ohYpKxPzc916c/L\nKf47blLq91ng1w16D62qp2s/rvT6N+BjwESKf09P7+Jc+1H52T9rIAc+BPTmcw9wKpXX9aCq/f6u\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fc9d2c6ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "cvresult = cvresult.iloc[100:] #从n_es=100开始显示\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std']         \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "x_axis = range(100,cvresult.shape[0]+100) #x轴的调整\n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( '2018hw3-n_es-detail.png' )\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.2 寻找max_depth, min_child_weight"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2.2.1 粗调，参数的步长为2；下一步是在粗调最佳参数周围进行精细调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59801, std: 0.00285, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.59825, std: 0.00291, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.59833, std: 0.00310, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.58752, std: 0.00409, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58829, std: 0.00424, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.58814, std: 0.00354, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.59232, std: 0.00337, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.59171, std: 0.00402, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.59066, std: 0.00461, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.61285, std: 0.00351, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.60631, std: 0.00521, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.60146, std: 0.00335, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.58752466115423285)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=286,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(x_train , y_train)\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_, gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 262.761378  ,  257.61774759,  262.31152334,  363.81211214,\n",
       "         365.90206661,  362.39955711,  469.95223236,  473.58117714,\n",
       "         470.01459746,  583.04924364,  567.29837565,  487.66692524]),\n",
       " 'mean_score_time': array([ 0.65985446,  0.60159922,  0.61042309,  0.97288613,  0.95132895,\n",
       "         0.95052681,  2.12003503,  2.01986942,  1.9278245 ,  4.66660399,\n",
       "         3.31120119,  2.56647363]),\n",
       " 'mean_test_score': array([-0.59800535, -0.59824567, -0.59832509, -0.58752466, -0.588291  ,\n",
       "        -0.5881351 , -0.59231947, -0.59170793, -0.59066186, -0.6128522 ,\n",
       "        -0.60631005, -0.6014594 ]),\n",
       " 'mean_train_score': array([-0.56942573, -0.57071323, -0.57112301, -0.49322093, -0.4999198 ,\n",
       "        -0.50393381, -0.37460064, -0.39911501, -0.41447412, -0.24036729,\n",
       "        -0.2905143 , -0.32144038]),\n",
       " 'param_max_depth': masked_array(data = [3 3 3 5 5 5 7 7 7 9 9 9],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_min_child_weight': masked_array(data = [1 3 5 1 3 5 1 3 5 1 3 5],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([ 7,  8,  9,  1,  3,  2,  6,  5,  4, 12, 11, 10]),\n",
       " 'split0_test_score': array([-0.59369086, -0.59358328, -0.59336544, -0.58000439, -0.58076116,\n",
       "        -0.58149614, -0.5862693 , -0.58518125, -0.58319092, -0.60814222,\n",
       "        -0.60033245, -0.59732136]),\n",
       " 'split0_train_score': array([-0.57105277, -0.57246715, -0.57261357, -0.49417051, -0.50201518,\n",
       "        -0.50632712, -0.37721036, -0.40168101, -0.41782143, -0.24066114,\n",
       "        -0.29204585, -0.3209135 ]),\n",
       " 'split1_test_score': array([-0.59703857, -0.59693346, -0.59705368, -0.58671413, -0.58640289,\n",
       "        -0.58820337, -0.59187485, -0.59053781, -0.5886806 , -0.61024142,\n",
       "        -0.60077195, -0.60090344]),\n",
       " 'split1_train_score': array([-0.57004084, -0.57097833, -0.57148366, -0.49299631, -0.5000686 ,\n",
       "        -0.5033774 , -0.37447027, -0.39925026, -0.41343112, -0.23791972,\n",
       "        -0.28961924, -0.3215262 ]),\n",
       " 'split2_test_score': array([-0.59749414, -0.59818742, -0.5981235 , -0.58892518, -0.59116532,\n",
       "        -0.58864273, -0.59304334, -0.59482414, -0.59109671, -0.61456549,\n",
       "        -0.60754134, -0.60188215]),\n",
       " 'split2_train_score': array([-0.56951161, -0.5705496 , -0.57070403, -0.49357012, -0.49963261,\n",
       "        -0.5042299 , -0.3731695 , -0.3974465 , -0.41355224, -0.24045959,\n",
       "        -0.29050699, -0.32060153]),\n",
       " 'split3_test_score': array([-0.60230019, -0.60183442, -0.60230406, -0.59064049, -0.59135255,\n",
       "        -0.59124144, -0.59404494, -0.59109851, -0.59347486, -0.61301542,\n",
       "        -0.60872099, -0.59976101]),\n",
       " 'split3_train_score': array([-0.56891962, -0.57023272, -0.57094602, -0.49393795, -0.50010807,\n",
       "        -0.50401922, -0.37413666, -0.39838786, -0.41340678, -0.24050174,\n",
       "        -0.28946473, -0.32139807]),\n",
       " 'split4_test_score': array([-0.59950347, -0.6006905 , -0.60077955, -0.59134028, -0.59177416,\n",
       "        -0.59109275, -0.59636618, -0.59689954, -0.59686807, -0.6182981 ,\n",
       "        -0.61418592, -0.60743086]),\n",
       " 'split4_train_score': array([-0.5676038 , -0.56933832, -0.56986779, -0.49142978, -0.49777457,\n",
       "        -0.50171543, -0.37401641, -0.39880941, -0.41415902, -0.24229428,\n",
       "        -0.29093471, -0.32276257]),\n",
       " 'std_fit_time': array([ 11.85829783,   3.19312057,   3.43572921,   2.52372949,\n",
       "          4.1532015 ,   5.01075693,   6.57799859,   5.38588504,\n",
       "          9.53252282,   9.1727001 ,   7.44121409,  19.20936759]),\n",
       " 'std_score_time': array([ 0.10262956,  0.08422902,  0.02434572,  0.04929229,  0.03673704,\n",
       "         0.0284867 ,  0.83497164,  0.46862558,  0.63757971,  1.06427031,\n",
       "         1.05652213,  0.62925797]),\n",
       " 'std_test_score': array([ 0.00284614,  0.0029093 ,  0.00310203,  0.00408512,  0.00424341,\n",
       "         0.00354221,  0.00336683,  0.00402488,  0.00461203,  0.0035104 ,\n",
       "         0.00521056,  0.00335102]),\n",
       " 'std_train_score': array([ 0.00114966,  0.00102903,  0.00090932,  0.00097943,  0.0013515 ,\n",
       "         0.00148686,  0.00137349,  0.00141483,  0.00169592,  0.0014012 ,\n",
       "         0.00094076,  0.00074008])}"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.587525 using {'max_depth': 5, 'min_child_weight': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAELCAYAAADz6wBxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8FeXd///X52zZwxp2kEVQEDBC\nCFREcQGDC0q1KlZv9XZptdZ6t1q0tlXUeuvd38+6UVu1arXuO1oIi0VBrQawYBGroKKGfc9G1vP5\n/jGTw0nIcpKTk5Pl83w8ziPnzFwzc52BzDtzzcx1iapijDHGNJcn3hUwxhjTvlmQGGOMiYoFiTHG\nmKhYkBhjjImKBYkxxpioWJAYY4yJigWJMcaYqFiQGGOMiYoFiTHGmKj44l2B1tCzZ08dPHhwvKth\njDHtyurVq3epakZj5TpFkAwePJhVq1bFuxrGGNOuiMg3kZSzpi1jjDFRsSAxxhgTFQsSY4wxUekU\n10iMMZGrqKggPz+f0tLSeFfFtJLExEQGDBiA3+9v1vIWJMaYGvLz80lLS2Pw4MGISLyrY2JMVdm9\nezf5+fkMGTKkWeuwpi1jTA2lpaX06NHDQqSTEBF69OgR1RmoBYkx5hAWIp1LtP/e1rTVgMJly0CV\nlOOOwxMIxLs6xhjTJlmQNGDPE09SkpeHJzWVtJNPIi0nh5TJky1UjDEmjDVtNWDQXx5j4KOPknbq\ndArfeZf8q69hw+Tj2HLTzRS9+y5aXh7vKhrT4ezbt48//vGPzVr2vvvuo6SkpIVr1DKmTp3a7B42\nXn/9ddavX9+kdZWWlpKdnc3RRx/NUUcdxa233tqsbUfCgqQB4veTOuU4+v3ud4xYsZyBj/yZtFNO\nofDtt/nuRz/mi+OmsOVXt1C0YgVaURHv6hrTIXTUIIlG7SCJREJCAv/4xz9Yu3Yta9asITc3lw8/\n/DAm9bOmrQhJIEDq8ceTevzx6NzbKPrgAwoX5lK4ZAn7X30VT5cupJ1yMuk5M0iZNBFp5v3YxrQl\nc9/8lPVbClp0naP6pXPrmUfVO/+mm27iyy+/JDMzk2nTptGrVy9efPFFysrKmDVrFnPnzqW4uJjz\nzjuP/Px8qqqq+M1vfsP27dvZsmULJ554Ij179mTZsmV1rj81NZWf/OQnLF26lG7dunHXXXfxy1/+\nkm+//Zb77ruPmTNnsmnTJi6++GKKi4sBeOihhzj22GN57bXXmDdvHkuWLGHbtm2ccMIJLF++nD59\n+hyynQMHDnDZZZexfv16Ro4cyYEDB0LzFi9ezK233kpZWRnDhg3jiSeeIDU1lcGDB3P++eeH6v7s\ns8+yY8cO5s+fz7vvvsudd97JK6+8AsBLL73ENddcw759+/jLX/7ClClTamxfREhNTQWcZ4MqKipi\ndhOFnZE0gwQCpE2dSr977mb4++8x4OE/kjb1BApzF/HdlVey4bgpbP3Nbyh6/320sjLe1TWmXbn7\n7rsZNmwYa9asYdq0aWzYsIG8vDzWrFnD6tWrWb58Obm5ufTr14+1a9eybt06cnJyuO666+jXrx/L\nli2rN0QAiouLmTp1KqtXryYtLY1f//rXLFmyhNdee43f/va3APTq1YslS5bw8ccf88ILL3DdddcB\nMGvWLPr06cO8efO48sormTt3bp0hAvDwww+TnJzMJ598wi233MLq1asB2LVrF3feeSdLly7l448/\nJisri3vvvTe0XHp6Onl5eVx77bVcf/31HHvsscycOZPf//73rFmzhmHDhgFQWVlJXl4e9913H3Pn\nzgVgy5YtnHbaaaF1VVVVkZmZSa9evZg2bRoTJ06M4l+mfnZGEiVPIEDaiSeSduKJBMvKKH7/fQoW\n5lLw9wXse+llvN26kTZtGukzckieMAHx2S437UdDZw6tYfHixSxevJhjjjkGgKKiIjZs2MCUKVO4\n4YYbmDNnDmecccYhf403JBAIkJOTA8CYMWNISEjA7/czZswYNm3aBDh/wV977bWsWbMGr9fLF198\nEVr+wQcfZPTo0UyaNInZs2fXu53ly5eHAmjs2LGMHTsWgA8//JD169czefJkAMrLy/ne974XWq56\nnbNnz+Z//ud/6l3/97//fQDGjx8fqne/fv1YsGBBqIzX62XNmjXs27ePWbNmsW7dOkaPHh3RfmoK\nO6q1IE9CAmknnUTaSScRLC2l+L33KFiYy/633mLfiy/i7d69Zqh4vfGusjFtmqpy880386Mf/eiQ\neatXr2bBggXcfPPNTJ8+PXQ20Ri/3x9q4vF4PCQkJITeV7otCH/4wx/o3bs3a9euJRgMkpiYGFp+\n8+bNeDwetm/fTjAYxOOpv2GnrqYkVWXatGk899xzjS7TUFNUdb29Xm+o3vXp2rUrU6dOJTc3NyZB\n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\nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fc80022550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('2018hw3-maxdepth_minchildweights_1.csv') #将寻找结果存入CSV文件\n",
    "\n",
    "# 以叶子节点权重和最大深度为度量建立评价度量\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'min_child_weight' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('2018hw3-maxdepth_minchildweights_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2.2.2 细调，将步长降为1，在max_depth=5,min_child_weight=1附近进行精细调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [4, 5, 6], 'min_child_weight': [1, 2, 3]}"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = [4,5,6]\n",
    "min_child_weight = [1,2,3]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59040, std: 0.00331, params: {'max_depth': 4, 'min_child_weight': 1},\n",
       "  mean: -0.59055, std: 0.00372, params: {'max_depth': 4, 'min_child_weight': 2},\n",
       "  mean: -0.59079, std: 0.00378, params: {'max_depth': 4, 'min_child_weight': 3},\n",
       "  mean: -0.58752, std: 0.00409, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58829, std: 0.00304, params: {'max_depth': 5, 'min_child_weight': 2},\n",
       "  mean: -0.58829, std: 0.00424, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.58978, std: 0.00308, params: {'max_depth': 6, 'min_child_weight': 1},\n",
       "  mean: -0.58964, std: 0.00437, params: {'max_depth': 6, 'min_child_weight': 2},\n",
       "  mean: -0.58993, std: 0.00376, params: {'max_depth': 6, 'min_child_weight': 3}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.58752466115423285)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=286,  \n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(x_train , y_train)\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_, gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 322.05932188,  319.55860038,  318.41512475,  363.56901011,\n",
       "         362.00744672,  375.06237245,  429.44149332,  423.04461098,\n",
       "         361.06961241]),\n",
       " 'mean_score_time': array([ 0.77637663,  0.75731268,  0.75600972,  1.01610107,  0.98331418,\n",
       "         1.07886782,  1.77932973,  2.03932104,  1.34377341]),\n",
       " 'mean_test_score': array([-0.5904035 , -0.59054786, -0.59078762, -0.58752466, -0.58829143,\n",
       "        -0.588291  , -0.58977994, -0.58964206, -0.5899318 ]),\n",
       " 'mean_train_score': array([-0.53563928, -0.53731291, -0.53829544, -0.49322093, -0.49669156,\n",
       "        -0.4999198 , -0.43880477, -0.44702796, -0.45303611]),\n",
       " 'param_max_depth': masked_array(data = [4 4 4 5 5 5 6 6 6],\n",
       "              mask = [False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_min_child_weight': masked_array(data = [1 2 3 1 2 3 1 2 3],\n",
       "              mask = [False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'max_depth': 4, 'min_child_weight': 1},\n",
       "  {'max_depth': 4, 'min_child_weight': 2},\n",
       "  {'max_depth': 4, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 2},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 6, 'min_child_weight': 1},\n",
       "  {'max_depth': 6, 'min_child_weight': 2},\n",
       "  {'max_depth': 6, 'min_child_weight': 3}],\n",
       " 'rank_test_score': array([7, 8, 9, 1, 3, 2, 5, 4, 6]),\n",
       " 'split0_test_score': array([-0.58454754, -0.5847748 , -0.58513022, -0.58000439, -0.58280473,\n",
       "        -0.58076116, -0.58440584, -0.58243402, -0.58354868]),\n",
       " 'split0_train_score': array([-0.53735067, -0.53911507, -0.53998951, -0.49417051, -0.4988161 ,\n",
       "        -0.50201518, -0.43819985, -0.44893162, -0.45444362]),\n",
       " 'split1_test_score': array([-0.59011041, -0.58892095, -0.58905007, -0.58671413, -0.5876353 ,\n",
       "        -0.58640289, -0.59105733, -0.58789471, -0.58848138]),\n",
       " 'split1_train_score': array([-0.53520896, -0.53660432, -0.53783252, -0.49299631, -0.49702381,\n",
       "        -0.5000686 , -0.43892933, -0.44684005, -0.4530896 ]),\n",
       " 'split2_test_score': array([-0.59015373, -0.5900337 , -0.58976103, -0.58892518, -0.58898382,\n",
       "        -0.59116532, -0.58921053, -0.59329868, -0.59145022]),\n",
       " 'split2_train_score': array([-0.53579489, -0.53731999, -0.5385036 , -0.49357012, -0.49663064,\n",
       "        -0.49963261, -0.43944825, -0.44607423, -0.45251727]),\n",
       " 'split3_test_score': array([-0.59360733, -0.59356576, -0.59501548, -0.59064049, -0.59134856,\n",
       "        -0.59135255, -0.59042568, -0.58971902, -0.59141831]),\n",
       " 'split3_train_score': array([-0.53499239, -0.53707859, -0.53806613, -0.49393795, -0.49601092,\n",
       "        -0.50010807, -0.43921654, -0.44690205, -0.45239902]),\n",
       " 'split4_test_score': array([-0.59359945, -0.59544556, -0.59498258, -0.59134028, -0.59068548,\n",
       "        -0.59177416, -0.59380154, -0.59486547, -0.5947619 ]),\n",
       " 'split4_train_score': array([-0.53484948, -0.53644658, -0.53708543, -0.49142978, -0.49497634,\n",
       "        -0.49777457, -0.43822989, -0.44639186, -0.45273104]),\n",
       " 'std_fit_time': array([ 8.18623793,  5.81792537,  1.28189623,  2.52306758,  6.15812396,\n",
       "         0.75046398,  0.58363778,  4.68600929,  1.43593815]),\n",
       " 'std_score_time': array([ 0.05354078,  0.03003078,  0.03640528,  0.04200946,  0.0196466 ,\n",
       "         0.14461081,  0.77108583,  0.70797776,  0.26346854]),\n",
       " 'std_test_score': array([ 0.00331419,  0.00372375,  0.00378287,  0.00408512,  0.00303619,\n",
       "         0.00424341,  0.00307978,  0.00437418,  0.00376006]),\n",
       " 'std_train_score': array([ 0.00091438,  0.0009545 ,  0.00096376,  0.00097943,  0.00126752,\n",
       "         0.0013515 ,  0.00050903,  0.00099893,  0.0007419 ])}"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_2.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.587525 using {'max_depth': 5, 'min_child_weight': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAELCAYAAACf7VJ0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl4VdW5+PHvm5kMjGEUEUFABJlM\nUWpBFERRi1LRK2ovVBFbbb1XKxWv3qK1tnHC4WcduHW2WqzWahWVWZyQBgRRQAWkiGEGJQMZeX9/\n7HWSk+Sc5GQ42Rnez/Ps5+y99tprr3MIebPWXmctUVWMMcaYxhbjdwWMMca0ThaAjDHG+MICkDHG\nGF9YADLGGOMLC0DGGGN8YQHIGGOMLywAGWOM8YUFIGOMMb6wAGSMMcYXcX5XoClLT0/X3r17+10N\nY4xpVlavXr1PVTvXlM8CUDV69+5NVlaW39UwxphmRUT+HUk+64IzxhjjCwtAxhhjfGEByBhjjC98\neQYkIh2B+UBvYBtwsaoeDJGvFFjvDrer6iSXPg64By+A5gLTVXWziNwPnO7yJwNdVLV9dWUZ09IU\nFxezY8cOCgoK/K6KaeGSkpLo2bMn8fHxdbrer0EIs4ElqpopIrPd8U0h8h1W1WEh0h8FzlfVjSJy\nDXArXhC6PpBBRH4FDI+gLGNalB07dpCWlkbv3r0REb+rY1ooVWX//v3s2LGDY489tk5l+NUFdz7w\njNt/Brigltcr0NbttwOyQ+SZCrxYp9oZ04wVFBTQqVMnCz4mqkSETp061aul7VcLqKuq7gRQ1Z0i\n0iVMviQRyQJKgExV/YdLnwEsEJHDwCHglOCLROQY4FhgaQRlGdPiWPAxjaG+P2dRC0AishjoFuLU\nLbUoppeqZotIH2CpiKxX1S3A9cA5qvqxiMwC5uIFpYBLgJdVtTSCsirXeyYwE6BXr161qGoQVfjo\nYTh2DHQbAvbLwBhjqohaAFLV8eHOichuEenuWj/dgT1hysh2r1tFZDkwXEQOAUNV9WOXbT7wdqVL\nLwGuraksoEoAUtV5wDyAjIwMrel9hnRwGyz8X0Ch7VEwYKK39R4NcYl1KtIYY1oav54BvQ5Mc/vT\ngNcqZxCRDiKS6PbTgVOBDcBBoJ2I9HdZzwQ2Bl03AOgAfBRBWdHR8ViYtRnOfwR6DIe1L8DzF8Ld\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fc80068d30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch2_2.best_score_, gsearch2_2.best_params_))\n",
    "test_means = gsearch2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_2.cv_results_[ 'std_train_score' ]\n",
    "pd.DataFrame(gsearch2_2.cv_results_).to_csv('2018hw3-maxdepth_minchildweights_2.csv')\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( '2018hw3-maxdepth_minchildweights_2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3 联立寻找的n_estimator,max_depth,min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def modelfit(alg, x_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params() #提取参数\n",
    "        xgb_param['num_class'] = 3 #设置类目参数\n",
    "        #直接调用xgboost\n",
    "        xgtrain = xgb.DMatrix(x_train, label = y_train)\n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        n_es = cvresult.shape[0] #最佳弱分类器参数n_estimators\n",
    "        alg.set_params(n_estimators = n_es) #重新赋值\n",
    "        \n",
    "        print (cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('2018hw3-my_preds4_5_1_286.csv', index_label = 'n_estimators')\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std']       \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "        x_axis = range(0, n_es)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( '2018hw3-n_estimators4_5_1_286.png' )\n",
    "        \n",
    "    alg.fit(x_train, y_train, eval_metric='mlogloss') #采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    train_predprob = alg.predict_proba(x_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     test-mlogloss-mean  test-mlogloss-std  train-mlogloss-mean  \\\n",
      "0              1.039976           0.000231             1.039239   \n",
      "1              0.990323           0.000217             0.989090   \n",
      "2              0.947896           0.000637             0.946200   \n",
      "3              0.911813           0.000609             0.909667   \n",
      "4              0.880946           0.000992             0.878194   \n",
      "5              0.853610           0.001001             0.850433   \n",
      "6              0.829860           0.001219             0.826079   \n",
      "7              0.808824           0.001123             0.804426   \n",
      "8              0.790475           0.000918             0.785470   \n",
      "9              0.774209           0.000996             0.768680   \n",
      "10             0.759671           0.001017             0.753572   \n",
      "11             0.746792           0.001187             0.740123   \n",
      "12             0.735339           0.000987             0.728260   \n",
      "13             0.724982           0.001070             0.717514   \n",
      "14             0.715801           0.001066             0.707864   \n",
      "15             0.707553           0.001199             0.699175   \n",
      "16             0.700479           0.001254             0.691404   \n",
      "17             0.694008           0.001351             0.684411   \n",
      "18             0.688099           0.001512             0.677868   \n",
      "19             0.682698           0.001620             0.671888   \n",
      "20             0.677849           0.001617             0.666585   \n",
      "21             0.673526           0.001748             0.661880   \n",
      "22             0.669550           0.001527             0.657450   \n",
      "23             0.666015           0.001465             0.653523   \n",
      "24             0.662327           0.001484             0.649358   \n",
      "25             0.659210           0.001538             0.645822   \n",
      "26             0.656408           0.001688             0.642288   \n",
      "27             0.653915           0.001887             0.639116   \n",
      "28             0.651397           0.002002             0.636151   \n",
      "29             0.649014           0.002129             0.633279   \n",
      "..                  ...                ...                  ...   \n",
      "256            0.591834           0.002485             0.490236   \n",
      "257            0.591782           0.002542             0.489900   \n",
      "258            0.591848           0.002526             0.489611   \n",
      "259            0.591819           0.002490             0.489253   \n",
      "260            0.591841           0.002466             0.488930   \n",
      "261            0.591781           0.002489             0.488620   \n",
      "262            0.591837           0.002594             0.488316   \n",
      "263            0.591823           0.002635             0.487988   \n",
      "264            0.591781           0.002560             0.487662   \n",
      "265            0.591720           0.002621             0.487353   \n",
      "266            0.591700           0.002652             0.487056   \n",
      "267            0.591747           0.002605             0.486751   \n",
      "268            0.591748           0.002550             0.486327   \n",
      "269            0.591748           0.002608             0.486001   \n",
      "270            0.591793           0.002649             0.485654   \n",
      "271            0.591693           0.002632             0.485298   \n",
      "272            0.591626           0.002680             0.484910   \n",
      "273            0.591551           0.002721             0.484540   \n",
      "274            0.591466           0.002710             0.484206   \n",
      "275            0.591459           0.002745             0.483868   \n",
      "276            0.591449           0.002743             0.483553   \n",
      "277            0.591430           0.002824             0.483234   \n",
      "278            0.591447           0.002752             0.482933   \n",
      "279            0.591460           0.002711             0.482579   \n",
      "280            0.591408           0.002797             0.482219   \n",
      "281            0.591388           0.002829             0.481867   \n",
      "282            0.591393           0.002808             0.481523   \n",
      "283            0.591421           0.002843             0.481230   \n",
      "284            0.591400           0.002779             0.480895   \n",
      "285            0.591384           0.002764             0.480609   \n",
      "\n",
      "     train-mlogloss-std  \n",
      "0              0.000377  \n",
      "1              0.000395  \n",
      "2              0.000252  \n",
      "3              0.000124  \n",
      "4              0.000463  \n",
      "5              0.000500  \n",
      "6              0.000517  \n",
      "7              0.000191  \n",
      "8              0.000416  \n",
      "9              0.000441  \n",
      "10             0.000646  \n",
      "11             0.000728  \n",
      "12             0.000784  \n",
      "13             0.000792  \n",
      "14             0.000904  \n",
      "15             0.001030  \n",
      "16             0.001033  \n",
      "17             0.001312  \n",
      "18             0.001212  \n",
      "19             0.001089  \n",
      "20             0.001051  \n",
      "21             0.000994  \n",
      "22             0.001151  \n",
      "23             0.001272  \n",
      "24             0.001411  \n",
      "25             0.001411  \n",
      "26             0.001159  \n",
      "27             0.001101  \n",
      "28             0.000917  \n",
      "29             0.000957  \n",
      "..                  ...  \n",
      "256            0.000940  \n",
      "257            0.000920  \n",
      "258            0.000934  \n",
      "259            0.001015  \n",
      "260            0.001061  \n",
      "261            0.000984  \n",
      "262            0.001021  \n",
      "263            0.000977  \n",
      "264            0.001008  \n",
      "265            0.000935  \n",
      "266            0.000954  \n",
      "267            0.000960  \n",
      "268            0.000984  \n",
      "269            0.000934  \n",
      "270            0.000927  \n",
      "271            0.000945  \n",
      "272            0.000888  \n",
      "273            0.000817  \n",
      "274            0.000815  \n",
      "275            0.000852  \n",
      "276            0.000877  \n",
      "277            0.000781  \n",
      "278            0.000756  \n",
      "279            0.000859  \n",
      "280            0.000839  \n",
      "281            0.000805  \n",
      "282            0.000825  \n",
      "283            0.000779  \n",
      "284            0.000765  \n",
      "285            0.000772  \n",
      "\n",
      "[286 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.504029889825\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fcc02cadd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=400,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "modelfit(xgb2_3, x_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nNXXq1KmMGTOm2cORJEmS1CTTpk1j7NixAGNTStN6e5z3LEmSJElSnZloSZIkSVKdmWhJkiRJUp2Z\naEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZlo\nSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJ\nkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmSJElSnZloSZIkSVKdmWhJkiRJUp2ZaEmS\nJElSnZloSZIkSVKdmWhJkiRJUp2NaPYABrNp06Y1ewiSJEmSmqi/OUGklOo8lNYXEcsBLzR7HJIk\nSZIGjeVTSv/qbWcTrS5ERADjgLebPRZgUYqkb3kGx3jajde/ebz2zeO1bx6vffN47ZvL6988Xvve\nWRSYkvqQPDl1sAulC9jrbHUgFTkfAG+nlJzL2GBe/+bx2jeP1755vPbN47VvLq9/83jte63P18bF\nMCRJkiSpzky0JEmSJKnOTLQGv1nAT0p/qvG8/s3jtW8er33zeO2bx2vfXF7/5vHaDxAXw5AkSZKk\nOrOiJUmSJEl1ZqIlSZIkSXVmoiVJkiRJdWaiJUmSJEl1ZqLVJBGxWURcGhFTIiJFxGeq9kdEHFHa\n/25E3BgRa1T1WTwiJkfE1NJrckQs1th30npqXfuIWCAifhERf4+I6aU+Z0fEuKpzPFM6tvz188a/\nm9bSi8/9mV1c1zuq+iwYEcdFxGul/0aXRMTyjX0nracX1776une+/r2sj5/7foiIQyPi7oh4OyJe\niYiLI2K1qj49fq4jYnzpv+H0Ur9jI2JkY99Na+np2kfE+0rX/fGImBERz5Wu69iq83T1/8ZXG/+O\nWkcvP/c3dnFd/1DVx991+qEXn/2Vavzc372sn5/9+WCi1TyLAA8CX+9m//eA75T2rwu8BFwTEYuW\n9TkPWAvYvvRaC5g8UAMeQmpd+1HAOsBPS3/uBnwIuKSLvj8Gli17/ddADHaI6elzD3Alldd1h6r9\nxwC7AnsBmwCjgcsiYnjdRzu09HTtl6167Q8k4E9V/fzc993mwAnABsC2wAjg6ohYpKxPzc916c/L\nKf47blLq91ng1w16D62qp2s/rvT6N+BjwESKf09P7+Jc+1H52T9rIAc+BPTmcw9wKpXX9aCq/f6u\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fcc02b3828>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('2018hw3-my_preds4_5_1_286.csv')\n",
    "cvresult = cvresult.iloc[100:]\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std']         \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( '2018hw3-n_estimators_detail4_5_1_286.png' )\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3 调整树的参数：subsample 和 colsample_bytree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58810, std: 0.00381, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.58609, std: 0.00417, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.58438, std: 0.00315, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.58378, std: 0.00342, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.58291, std: 0.00350, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.58206, std: 0.00303, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.58734, std: 0.00388, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.58603, std: 0.00445, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.58424, std: 0.00413, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.58369, std: 0.00427, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.58280, std: 0.00399, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.58252, std: 0.00416, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.58752, std: 0.00409, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.58601, std: 0.00457, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.58469, std: 0.00386, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.58378, std: 0.00374, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.58279, std: 0.00360, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.58220, std: 0.00334, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.58652, std: 0.00426, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.58558, std: 0.00360, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.58382, std: 0.00350, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.58306, std: 0.00399, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.58189, std: 0.00377, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.58199, std: 0.00391, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       " -0.58188927002451585)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=286,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(x_train , y_train)\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_, gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 307.39225235,  338.38081546,  369.93117642,  377.70955081,\n",
       "         372.44525833,  371.30652962,  346.75858393,  387.6949924 ,\n",
       "         408.86526299,  423.37232208,  418.04316273,  406.25194201,\n",
       "         387.52765799,  414.19793649,  427.23639307,  429.44907475,\n",
       "         415.87559662,  421.11131272,  377.65239921,  421.76364665,\n",
       "         466.00854964,  465.02122531,  455.61222358,  396.02337933]),\n",
       " 'mean_score_time': array([ 0.9545372 ,  0.97408905,  0.97639537,  0.97158251,  0.96837459,\n",
       "         1.00146174,  0.9953455 ,  1.02121458,  0.94671645,  0.94791985,\n",
       "         0.97108097,  0.93277993,  0.97378826,  0.92044702,  0.87191796,\n",
       "         0.91132259,  0.87693095,  0.86269307,  0.90530667,  0.88545389,\n",
       "         0.90029316,  0.93989835,  0.85888271,  0.72614703]),\n",
       " 'mean_test_score': array([-0.58809965, -0.58609145, -0.58437884, -0.58377709, -0.58290777,\n",
       "        -0.5820579 , -0.58734435, -0.5860255 , -0.58423721, -0.58368952,\n",
       "        -0.58279885, -0.58252156, -0.58752466, -0.58601113, -0.5846915 ,\n",
       "        -0.58377918, -0.58279401, -0.58219861, -0.58651727, -0.58557811,\n",
       "        -0.58382449, -0.58306477, -0.58188927, -0.58198636]),\n",
       " 'mean_train_score': array([-0.49870606, -0.49598409, -0.49370749, -0.49249803, -0.49199807,\n",
       "        -0.49307829, -0.49551004, -0.49176875, -0.49050365, -0.48975103,\n",
       "        -0.49039131, -0.49079542, -0.49322093, -0.48911002, -0.48721342,\n",
       "        -0.48681217, -0.48694538, -0.48810789, -0.49048008, -0.48681307,\n",
       "        -0.48552207, -0.48405108, -0.48472578, -0.48643808]),\n",
       " 'param_colsample_bytree': masked_array(data = [0.6 0.6 0.6 0.6 0.6 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.8 0.8 0.8 0.8 0.8 0.8\n",
       "  0.9 0.9 0.9 0.9 0.9 0.9],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_subsample': masked_array(data = [0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8\n",
       "  0.3 0.4 0.5 0.6 0.7 0.8],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([24, 20, 15, 11,  8,  3, 22, 19, 14, 10,  7,  5, 23, 18, 16, 12,  6,\n",
       "         4, 21, 17, 13,  9,  1,  2]),\n",
       " 'split0_test_score': array([-0.5826327 , -0.57965906, -0.58011959, -0.57801709, -0.57661374,\n",
       "        -0.57695098, -0.58155237, -0.57839519, -0.57802515, -0.57679467,\n",
       "        -0.57610765, -0.57490015, -0.58000439, -0.57857784, -0.57806023,\n",
       "        -0.57737004, -0.57754308, -0.57648904, -0.57906513, -0.57937882,\n",
       "        -0.5776402 , -0.57631075, -0.5760461 , -0.57616723]),\n",
       " 'split0_train_score': array([-0.49905568, -0.49743119, -0.49501418, -0.49438345, -0.49250714,\n",
       "        -0.49457   , -0.49666173, -0.49412736, -0.49196689, -0.49081505,\n",
       "        -0.49092108, -0.49115908, -0.49417051, -0.49067308, -0.48737914,\n",
       "        -0.48792752, -0.48814909, -0.48879348, -0.49233114, -0.48822127,\n",
       "        -0.48684335, -0.48341762, -0.48488208, -0.485909  ]),\n",
       " 'split1_test_score': array([-0.5858569 , -0.58388604, -0.58139808, -0.58208715, -0.58173143,\n",
       "        -0.58033014, -0.58471418, -0.58400023, -0.58244558, -0.58203132,\n",
       "        -0.58079509, -0.58190618, -0.58671413, -0.58427201, -0.58350446,\n",
       "        -0.58229994, -0.58038114, -0.58064479, -0.58502384, -0.58374594,\n",
       "        -0.58255513, -0.58228054, -0.58009643, -0.57997273]),\n",
       " 'split1_train_score': array([-0.4993709 , -0.49603842, -0.49400363, -0.49351031, -0.49242511,\n",
       "        -0.49241571, -0.49574137, -0.49202012, -0.49135873, -0.48820334,\n",
       "        -0.49026093, -0.49085513, -0.49299631, -0.48992711, -0.48763645,\n",
       "        -0.48671966, -0.48735082, -0.4882326 , -0.49108325, -0.48710531,\n",
       "        -0.4867982 , -0.48588615, -0.48438163, -0.48787851]),\n",
       " 'split2_test_score': array([-0.58796807, -0.58592404, -0.58495892, -0.58478206, -0.58430581,\n",
       "        -0.58343654, -0.58857037, -0.58750802, -0.58329855, -0.58389905,\n",
       "        -0.58392226, -0.58341508, -0.58892518, -0.5864167 , -0.58532024,\n",
       "        -0.58469909, -0.58258534, -0.58337264, -0.58747618, -0.58760567,\n",
       "        -0.58527228, -0.58248105, -0.58135976, -0.58111797]),\n",
       " 'split2_train_score': array([-0.49888467, -0.4955788 , -0.49295407, -0.4913924 , -0.49218162,\n",
       "        -0.49360089, -0.49511274, -0.49228452, -0.48993533, -0.4899694 ,\n",
       "        -0.49006867, -0.49138097, -0.49357012, -0.48906027, -0.48762808,\n",
       "        -0.48678178, -0.48719911, -0.48757166, -0.48943689, -0.48703493,\n",
       "        -0.48435692, -0.48502468, -0.48517588, -0.48644771]),\n",
       " 'split3_test_score': array([-0.59016409, -0.5914224 , -0.58758334, -0.58760683, -0.5860084 ,\n",
       "        -0.58474206, -0.58902578, -0.58944896, -0.58754678, -0.58615665,\n",
       "        -0.58594614, -0.58597392, -0.59064049, -0.58847843, -0.58705812,\n",
       "        -0.58635725, -0.58636558, -0.58455227, -0.59028566, -0.58917716,\n",
       "        -0.58600858, -0.58723846, -0.58620067, -0.58635883]),\n",
       " 'split3_train_score': array([-0.49804548, -0.49680192, -0.49279025, -0.49137117, -0.49238396,\n",
       "        -0.49297017, -0.49579345, -0.49120219, -0.48975782, -0.48999875,\n",
       "        -0.49043134, -0.49028495, -0.49393795, -0.48848414, -0.48733865,\n",
       "        -0.48691678, -0.48664046, -0.48710225, -0.49023507, -0.48519542,\n",
       "        -0.48406561, -0.48259419, -0.48506762, -0.4863621 ]),\n",
       " 'split4_test_score': array([-0.59387824, -0.58956675, -0.58783533, -0.58639314, -0.5858804 ,\n",
       "        -0.58483063, -0.59286073, -0.59077653, -0.5898717 , -0.58956769,\n",
       "        -0.58722446, -0.58641363, -0.59134028, -0.59231258, -0.5895159 ,\n",
       "        -0.5881709 , -0.58709622, -0.58593543, -0.59073683, -0.58798369,\n",
       "        -0.58764742, -0.58701424, -0.58574456, -0.58631632]),\n",
       " 'split4_train_score': array([-0.49817356, -0.4940701 , -0.49377531, -0.4918328 , -0.49049253,\n",
       "        -0.49183466, -0.49424091, -0.48920957, -0.48949948, -0.48976859,\n",
       "        -0.49027453, -0.49029695, -0.49142978, -0.48740547, -0.48608475,\n",
       "        -0.48571512, -0.48538743, -0.48883948, -0.48931403, -0.48650844,\n",
       "        -0.48554629, -0.48333277, -0.48412171, -0.48559307]),\n",
       " 'std_fit_time': array([  6.77922854,   5.17158633,   5.77431677,   8.06447708,\n",
       "          9.37955706,  10.33943824,   7.52132933,   8.95829002,\n",
       "          7.18228953,  10.45995278,   9.17486128,   8.0831123 ,\n",
       "         13.48092062,   6.12788282,  16.30619384,   3.9512532 ,\n",
       "          6.23677351,   7.27767422,   7.28114023,   6.23405501,\n",
       "          8.46357107,   7.3485477 ,  13.03084623,  26.38840767]),\n",
       " 'std_score_time': array([ 0.02107974,  0.13930061,  0.09306641,  0.04637349,  0.07647017,\n",
       "         0.12503354,  0.05497362,  0.11662517,  0.01431231,  0.02605273,\n",
       "         0.06294123,  0.025511  ,  0.05425185,  0.04408566,  0.02770218,\n",
       "         0.10245069,  0.01579132,  0.02339749,  0.03337267,  0.03170011,\n",
       "         0.02373054,  0.11203666,  0.05869804,  0.03176219]),\n",
       " 'std_test_score': array([ 0.00381007,  0.00416571,  0.00314891,  0.00342215,  0.00350441,\n",
       "         0.00302852,  0.00387868,  0.00444551,  0.00413224,  0.00426538,\n",
       "         0.00398847,  0.00415525,  0.00408512,  0.00456581,  0.00386397,\n",
       "         0.00374282,  0.00359726,  0.00334349,  0.00425887,  0.00359559,\n",
       "         0.00350249,  0.00398975,  0.00377064,  0.00391247]),\n",
       " 'std_train_score': array([ 0.00051304,  0.00114835,  0.00080109,  0.00122591,  0.00076037,\n",
       "         0.00094822,  0.00080359,  0.00159766,  0.00097569,  0.00085286,\n",
       "         0.00028879,  0.00044446,  0.00097943,  0.0011323 ,  0.00057757,\n",
       "         0.00070256,  0.00091628,  0.00068113,  0.00112234,  0.00098257,\n",
       "         0.00117079,  0.00121286,  0.00040675,  0.00078418])}"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581889 using {'colsample_bytree': 0.9, 'subsample': 0.7}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fc80349048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('2018hw3-my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( '2018hw3-subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4 调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1.5, 2], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58209, std: 0.00380, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58224, std: 0.00359, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58224, std: 0.00344, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58185, std: 0.00355, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58187, std: 0.00388, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58243, std: 0.00334, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       " -0.58184791842542638)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=286,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.7,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(x_train , y_train)\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_, gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 459.67980547,  465.05231943,  485.37630787,  473.60399365,\n",
       "         469.9039515 ,  419.58966994]),\n",
       " 'mean_score_time': array([ 0.89026651,  0.97709723,  1.04507804,  0.92154984,  1.00908232,\n",
       "         0.85611539]),\n",
       " 'mean_test_score': array([-0.58208531, -0.58224144, -0.58224461, -0.58184792, -0.58186561,\n",
       "        -0.58242612]),\n",
       " 'mean_train_score': array([-0.48619574, -0.48771374, -0.49080182, -0.4889276 , -0.49033122,\n",
       "        -0.49282215]),\n",
       " 'param_reg_alpha': masked_array(data = [1.5 1.5 1.5 2 2 2],\n",
       "              mask = [False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_reg_lambda': masked_array(data = [0.5 1 2 0.5 1 2],\n",
       "              mask = [False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([3, 4, 5, 1, 2, 6]),\n",
       " 'split0_test_score': array([-0.57566819, -0.57615545, -0.57709022, -0.57588405, -0.57583731,\n",
       "        -0.57699135]),\n",
       " 'split0_train_score': array([-0.48640078, -0.48773855, -0.49142329, -0.48914419, -0.49061056,\n",
       "        -0.49361539]),\n",
       " 'split1_test_score': array([-0.58073112, -0.58101941, -0.58065736, -0.58027822, -0.57992051,\n",
       "        -0.58068228]),\n",
       " 'split1_train_score': array([-0.48558215, -0.48741216, -0.49040147, -0.48837386, -0.49013195,\n",
       "        -0.49267446]),\n",
       " 'split2_test_score': array([-0.58249004, -0.58235964, -0.58139946, -0.5826196 , -0.58164681,\n",
       "        -0.5829628 ]),\n",
       " 'split2_train_score': array([-0.48666502, -0.48701715, -0.49040348, -0.48948888, -0.48964229,\n",
       "        -0.49293622]),\n",
       " 'split3_test_score': array([-0.58476886, -0.58554954, -0.5855877 , -0.58435875, -0.58505258,\n",
       "        -0.58508672]),\n",
       " 'split3_train_score': array([-0.48718052, -0.48878423, -0.49173371, -0.4890698 , -0.49138888,\n",
       "        -0.49308382]),\n",
       " 'split4_test_score': array([-0.58676978, -0.58612434, -0.58648958, -0.58610027, -0.58687237,\n",
       "        -0.58640865]),\n",
       " 'split4_train_score': array([-0.48515024, -0.48761663, -0.49004715, -0.48856129, -0.48988243,\n",
       "        -0.49180083]),\n",
       " 'std_fit_time': array([  7.98171713,   7.21033657,   8.1507544 ,  11.89873461,\n",
       "         22.60267266,   5.96015726]),\n",
       " 'std_score_time': array([ 0.01703468,  0.14376876,  0.07140047,  0.03276472,  0.04487514,\n",
       "         0.13765077]),\n",
       " 'std_test_score': array([ 0.00380317,  0.00359351,  0.00343498,  0.00354999,  0.00388312,\n",
       "         0.00334077]),\n",
       " 'std_train_score': array([ 0.00073506,  0.00058859,  0.0006547 ,  0.0004057 ,  0.00061845,\n",
       "         0.00059592])}"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581848 using {'reg_alpha': 2, 'reg_lambda': 0.5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAELCAYAAADkyZC4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8FeXZ//HPxY6goICKBAQVBASK\nGiiCVaHagguujxVXUKHW+qBYf9at1ofaR0XqQtFHccG1SEtdQEVEC1IRhQjIvosQBWRRJAUCIdfv\nj5ngSUjIScicJfm+X6+8ODNzz8w1Cedc556Zey5zd0RERCpatWQHICIilZMSjIiIREIJRkREIqEE\nIyIikVCCERGRSCjBiIhIJJRgREQkEkowIiISCSUYERGJRI1kB5BMjRs39pYtWyY7DBGRtPL5559v\ncvcmpbWr0gmmZcuWZGVlJTsMEZG0YmZfxdNOp8hERCQSSjAiIhIJJRgREYlElb4GU5zdu3eTnZ3N\nzp07kx2KFKNOnTpkZGRQs2bNZIciIqVQgikiOzubgw8+mJYtW2JmyQ5HYrg7mzdvJjs7m1atWiU7\nHBEphU6RFbFz504aNWqk5JKCzIxGjRqpdymSJpRgiqHkkrr0txFJH0owIiJViTt88lfYviXyXeka\njIhIVZG/B94eArNfBAy63xTp7tSDqeKmTp3Kueeee8Bt9mfJkiWccsop1K5dm+HDh5fYrn///rRq\n1YrOnTvTuXNn5s6dW+59ikgRe3bD6wOD5PKz2+CU30a+S/VgUpy74+5Uq5a+3wUOO+wwRowYwZtv\nvllq24cffphLLrkkAVGJVCG7d8A/+sOy9+DM/4FTb0nIbpVg9uN/Jixk0Tc/VOg22x91CH8874T9\ntlm9ejV9+vShZ8+ezJgxg1tuuYWnnnqK3Nxcjj32WEaPHk39+vV59913ufXWW2ncuDEnnXQSq1at\n4u233y52mzNnzuSWW25hx44d1K1bl9GjR3P88ccXanPfffexcuVKvv76a9auXcvtt9/OwIEDAcjJ\nyeGSSy5hwYIFnHzyybzyyiuYGUOHDmXChAns2LGD7t278/TTT+9zIf7www/n8MMP55133jmA35yI\nlEvuNhjTD1Z/DOf8Bbpcn7Bdp+/X4kpu6dKlXH311UyePJnnnnuODz74gNmzZ5OZmckjjzzCzp07\n+fWvf83EiRP5+OOP2bhx436317ZtW6ZNm8acOXMYOnQod911V7Ht5s2bxzvvvMOMGTMYOnQo33zz\nDQBz5szhscceY9GiRaxatYrp06cDcNNNNzFr1iwWLFjAjh079ia4p556iqeeeqrMx3333XfTqVMn\nhgwZQm5ubpnXF5EY27fASxfAV5/AhU8nNLmAejD7VVpPI0pHH3003bp14+2332bRokX06NEDgF27\ndnHKKaewZMkSjjnmmL0DDvv168eoUaNK3N7WrVu55pprWL58OWbG7t27i213/vnnU7duXerWrUvP\nnj2ZOXMmDRs2pGvXrmRkZADQuXNnVq9ezamnnsqUKVMYNmwY27dvZ8uWLZxwwgmcd9553HDDDWU+\n5gceeIAjjzySXbt2MWjQIB566CHuvffeMm9HRICcb+HlC2HTMrj0JWhX/uuo5RVpD8bMepvZUjNb\nYWZ3FLO8v5ltNLO54c/1McuGmdlCM1tsZiMscJCZvWNmS8JlDxazzUvMzM0sM8pji1q9evWA4BrM\nWWedxdy5c5k7dy6LFi3iueeew93LtL0//OEP9OzZkwULFjBhwoQSBysWPb1VMF27du2986pXr05e\nXh47d+7kxhtvZNy4ccyfP5+BAwce0CDIpk2bYmbUrl2bAQMGMHPmzHJvS6RK+34tPN8btqyCy8cm\nJblAhAnGzKoDTwB9gPZAPzNrX0zTse7eOfx5Nly3O9AD6AR0ALoAp4fth7t7W+BEoIeZ9YnZ58HA\nYOCziA4r4bp168b06dNZsWIFANu3b2fZsmW0bduWVatWsXr1agDGjh273+1s3bqVZs2aAfDCCy+U\n2O6tt95i586dbN68malTp9KlS5cS2xYkk8aNG5OTk8O4cePKcGT7WrduHRAk1TfffJMOHToc0PZE\nqqTNK4Pk8p9NcNWbcGyvpIUSZQ+mK7DC3Ve5+y7gNeD8ONd1oA5QC6gN1AQ2uPt2d58CEG5zNpAR\ns96fgGFApXmWSJMmTXjhhRfo168fnTp1olu3bixZsoS6devy5JNP0rt3b0499VSOOOIIGjRoUOJ2\nbr/9du6880569OjBnj17SmzXtWtXzjnnHLp168Yf/vAHjjrqqBLbNmzYkIEDB9KxY0cuuOCCQsko\n9hrM+vXrycjI4JFHHuH+++8nIyODH34Ibp44++yz917nueKKK+jYsSMdO3Zk06ZN3HPPPWX6XYlU\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fc8007edd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('2018hw3-my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( '2018hw3-reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "得到的最佳参数：n_estimators=286, max_depth=5, min_child_weight=1, subsample=0.7, colsample_bytree=0.9, reg_alpha=2, reg_lambda=0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "改小此时学习率为0.02，再次调整弱分类器数目n_estimator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def modelfit(alg, x_train, y_train, cv_folds=5, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    xgtrain = xgb.DMatrix(x_train, label = y_train)        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)  \n",
    "    cvresult.to_csv('2018hw3-6_nestimators.csv', index_label = 'n_estimators')\n",
    "    n_es = cvresult.shape[0]\n",
    "    alg.set_params(n_estimators = n_es)\n",
    "    alg.fit(x_train, y_train, eval_metric='mlogloss')\n",
    "\n",
    "    train_predprob = alg.predict_proba(x_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "    print ('logloss of train is:', logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of train is: 0.505040119356\n"
     ]
    }
   ],
   "source": [
    "xgb6 = XGBClassifier(\n",
    "        learning_rate =0.02,\n",
    "        n_estimators=2000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample = 0.7,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel=0.7,\n",
    "        reg_alpha = 2,\n",
    "        reg_lambda = 0.5,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb6, x_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'base_score': 0.5,\n",
       " 'booster': 'gbtree',\n",
       " 'colsample_bylevel': 0.7,\n",
       " 'colsample_bytree': 0.9,\n",
       " 'gamma': 0,\n",
       " 'learning_rate': 0.02,\n",
       " 'max_delta_step': 0,\n",
       " 'max_depth': 5,\n",
       " 'min_child_weight': 1,\n",
       " 'missing': None,\n",
       " 'n_estimators': 1355,\n",
       " 'nthread': 1,\n",
       " 'objective': 'multi:softprob',\n",
       " 'reg_alpha': 2,\n",
       " 'reg_lambda': 0.5,\n",
       " 'scale_pos_weight': 1,\n",
       " 'seed': 3,\n",
       " 'silent': 1,\n",
       " 'subsample': 0.7}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb6.get_xgb_params() #打印最佳参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEXCAYAAABYsbiOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8XHW9//HXZ7K32bokdKeFsrQI\nIlYWRUHcENlE5YLgT9y4esX1er149edVfhcV9brClYte4Kos4g6I4gKIomILtFXoQind9yVN0iZp\nls/vj+83zSSdSZM0kzPJvJ+Px3nM2ebMZ84k856zfY+5OyIiIpmkki5ARETyl0JCRESyUkiIiEhW\nCgkREclKISEiIlkpJEREJCuFhEgaM/s3M/tO0nWI5AuFxChjZpVmtsbM3po2rsrM1pnZm9PGLTCz\n+81st5k1mNkzZna9mU2I068ys04za47dajN7X45rP9vMNuTyNQYjUz3u/jl3f3eOXm+Nmb06F8vO\nhZH6vEbbeik0ColRxt2bgauBr5tZXRz9RWCRu/8IwMxeCjwCPAYc7+61wLlAB/DCtMX92d0r3b0S\neDPwRTN70ci8ExkMMytOugYpUO6ubhR2wO3AXcDZwE5gatq0PwLfPMTzrwL+2GfcX4G3pg1fCDwN\nNBBCZ17atHlxXEOc58K0aecBzwBNwEbgY8B4oAXoAppjNy3L+7oJ+EV8/uPA0QNYH8cDvwF2ASuA\nS4dSD/AZ4PvxebMBB94BrAd2A+8FXgIsje/9xrTXORp4KH4eO4A7gNo47XvxtVria318AOt4DfCv\n8bXagOI4vDG+lxXAqzKsi9OBLUBR2rg3Aktj/6nAIqAR2Ap8Jcs6PRvYkGVaDfBdYDuwFvgUkIrT\nioD/jOvgeeCauB6LsyxrDfDqLNPeA6yKn+u93X8zgAFfBbYBe+I6ekG2zzvp/9fR3CVegLohfnAw\nAdgc/xHfkTZ+PNAJnH2I519FWkjEL74G4Ng4fCywF3gNUAJ8PP6zlsbhVcC/xeFz4j/kcfG5m4GX\np9V5SuzP+qWTVsft8Qvh1PileAdw9yGeM57wJf6O+JxT4no5YbD1kDkkbgbKgdcCrcDPgHpgevyS\nOivOPzeurzKgDngU+Frasnt9Gfa3jtPmXwzMBCqA4+L7nJZWX8YABZ4DXpM2/EPg2tj/Z+Btsb8S\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x189538ed2e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('2018hw3-6_nestimators.csv')\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( '2018hw3-n_estimators6.png' )\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存模型\n",
    "import pickle\n",
    "pickle.dump(xgb6, open(\"xgb_model.pkl\", 'wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of train is: 0.505040119356\n"
     ]
    }
   ],
   "source": [
    "#调用上述模型\n",
    "xgb = pickle.load(open(\"xgb_model.pkl\", 'rb'))\n",
    "train_predprob = xgb.predict_proba(x_train)\n",
    "logloss = log_loss(y_train, train_predprob)\n",
    "#Print model report:\n",
    "print ('logloss of train is:', logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "#用训练好的模型预测测试集(输出为3类的概率)，将结果用df存在csv文件中\n",
    "y_test_pred = xgb.predict_proba(datatest)\n",
    "out_df1 = pd.DataFrame(y_test_pred)\n",
    "out_df1.columns = [\"high\", \"medium\", \"low\"]\n",
    "out_df = pd.concat([out_df1], axis = 1)\n",
    "out_df.to_csv(\"2018hw3-xgb_Rent.csv\", index=False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
